package structural.bridge;

//好处：
//        桥接模式提高了系统的可扩充性，在两个变化维度中任意扩展一个维度，都不需要修改原有系统。
//        如：如果现在还有一种视频文件类型wmv，我们只需要再定义一个类实现VideoFile接口即可，
//        其他类不需要发生变化。
//        实现细节对客户透明
//使用场景
//        当一个类存在两个独立变化的维度，且这两个维度都需要进行扩展时。
//        当一个系统不希望使用继承或因为多层次继承导致系统类的个数急剧增加时。
//        当一个系统需要在构件的抽象化角色和具体化角色之间增加更多的灵活性时。避免在两个层次之间
//        建立静态的继承联系，通过桥接模式可以使它们在抽象层建立一个关联关系。

//桥接模式
public class Client {
    public static void main(String[] args) {
        AVIFile aviFile = new AVIFile();
        WindowsSystem windowsSystem = new WindowsSystem(aviFile);
        windowsSystem.play("逃学威龙");

        RMBVFile rmbvFile = new RMBVFile();
        Mac mac = new Mac(rmbvFile);
        Mac mac2 = new Mac(aviFile);
        mac.play("西游降魔篇");
        mac2.play("西游降魔篇");
    }
}
